// Dart中箭头符号 "=>" 的用法示例
void main() {
  print('1. 箭头函数（单行函数）：');
  // 1.1 基本箭头函数
  int add(int a, int b) => a + b;
  print('add(2, 3) = ${add(2, 3)}'); // 输出: 5

  // 1.2 无参数箭头函数
  String getMessage() => 'Hello Dart!';
  print('getMessage() = ${getMessage()}'); // 输出: Hello Dart!

  // 1.3 箭头函数作为参数
  List<int> numbers = [1, 2, 3, 4, 5];
  var doubled = numbers.map((n) => n * 2);
  print('doubled = $doubled'); // 输出: (2, 4, 6, 8, 10)

  print('\n2. 箭头函数在类中的使用：');
  var calculator = Calculator();
  print('calculator.multiply(3, 4) = ${calculator.multiply(3, 4)}'); // 输出: 12
  print('calculator.square(5) = ${calculator.square(5)}'); // 输出: 25

  print('\n3. 箭头函数与getter/setter：');
  var person = Person('张三', 20);
  print('person.info = ${person.info}'); // 输出: 张三(20岁)
  print('person.isAdult = ${person.isAdult}'); // 输出: true

  print('\n4. 箭头函数在异步编程中的使用：');
  // 4.1 异步箭头函数
  Future<String> fetchData() async => 'Data fetched';
  fetchData().then((data) => print('异步结果: $data'));

  // 4.2 Stream转换
  Stream<int> countStream() async* {
    yield* Stream.fromIterable([1, 2, 3]);
  }
  countStream()
      .map((n) => n * n)
      .listen((n) => print('Stream数据: $n'));

  print('\n5. 箭头函数在集合操作中的使用：');
  // 5.1 where过滤
  var evenNumbers = numbers.where((n) => n.isEven);
  print('偶数: $evenNumbers');

  // 5.2 reduce操作
  var sum = numbers.reduce((a, b) => a + b);
  print('总和: $sum');

  // 5.3 sort排序
  var fruits = ['banana', 'apple', 'orange'];
  fruits.sort((a, b) => a.compareTo(b));
  print('排序后: $fruits');

  print('\n6. 箭头函数与泛型：');
  var transformer = Transformer<int, String>();
  print('转换结果: ${transformer.transform(42, (n) => n.toString())}');

  print('\n7. 箭头函数在回调中的使用：');
  var button = Button();
  button.onClick(() => print('按钮被点击'));
  button.simulateClick();
}

// 在类中使用箭头函数
class Calculator {
  // 方法使用箭头函数
  int multiply(int a, int b) => a * b;
  
  // 带类型的箭头函数
  num square(num x) => x * x;
  
  // 链式箭头函数
  int addThenMultiply(int x, int y) => multiply(x + y, 2);
}

// getter/setter中使用箭头函数
class Person {
  String name;
  int age;

  Person(this.name, this.age);

  // getter使用箭头函数
  String get info => '$name(${age}岁)';
  bool get isAdult => age >= 18;

  // setter使用箭头函数
  set ageInMonths(int months) => age = months ~/ 12;
}

// 泛型类中使用箭头函数
class Transformer<T, R> {
  R transform(T input, R Function(T) transformer) => transformer(input);
}

// 回调中使用箭头函数
class Button {
  void Function()? _onClickListener;

  // 设置点击监听器
  void onClick(void Function() listener) => _onClickListener = listener;

  // 模拟点击
  void simulateClick() => _onClickListener?.call();
}

// Flutter Widget中箭头函数的使用示例（注释掉以避免依赖）
/*
class ArrowExample extends StatelessWidget {
  const ArrowExample({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(
      title: const Text('箭头函数示例'),
    ),
    body: Center(
      child: ElevatedButton(
        // 按钮点击事件使用箭头函数
        onPressed: () => print('按钮被点击'),
        child: const Text('点击我'),
      ),
    ),
  );
}
*/ 